﻿#include "OperatorsLight.h"

#include "GUIFrame/MainWindow.h"
#include "GUIDialog/LightWidget.h"
#include "PostGraphAdaptor/PostGraphObjectManager.h"
#include "PostGraphAdaptor/PostGraphObjectLight.h"

#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Component/FITKWidget/FITKTabWidget.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostData.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPost3DManager.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostLight.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostLightManager.h"

namespace OperModel
{
    bool OperatorsLight::execGUI()
    {
        GUI::MainWindow* mainWin = dynamic_cast<GUI::MainWindow*>(FITKAPP->getGlobalData()->getMainWindow());
        if (mainWin == nullptr)return false;
        Comp::FITKTabWidget* eventWidget = mainWin->getEventWidget();
        if (eventWidget == nullptr)return false;
        if (_senderName == "actionLight") {
            if (_isChecked) {
                GUI::LightWidget* lightWidget = new GUI::LightWidget(this);
                eventWidget->addTab(lightWidget, tr("Light"));
            }
            else {
                int index = eventWidget->findTabIndex(tr("Light"));
                QWidget* widget = eventWidget->widget(index);
                if (widget) {
                    delete widget;
                    widget = nullptr;
                }
                eventWidget->removeTab(index);
            }

            if (eventWidget->count() > 0)eventWidget->show();
            else eventWidget->hide();
        }
        else if (_senderName == "actionLightDelete") {
            int objID = -1;
            argValue(objID_String, objID);
            if (objID <= 0)return false;

            //移除灯光可视化
            Interface::PostGraphObjectManager* actorManager = Interface::PostGraphObjectManager::getInstance();
            if (actorManager == nullptr)return false;
            Interface::PostGraphLightManager* lightObjManager = actorManager->getGraphLightManager();
            if (lightObjManager == nullptr)return false;
            for (int i = 0; i < lightObjManager->getDataCount(); i++) {
                Interface::PostGraphObjectLight* lightObj = lightObjManager->getDataByIndex(i);
                if(lightObj == nullptr)continue;
                if (lightObj->getLightData() == nullptr)continue;
                if (objID == lightObj->getLightData()->getDataObjectID()) {
                    lightObjManager->removeDataObj(lightObj);
                }
            }

            //移除灯光数据
            Interface::FITKCFDPostLightManager* lightDataManager = FITKAPP->getGlobalData()->getPostData<Interface::FITKCFDPostData>()->getPostLightManager();
            if (lightDataManager == nullptr)return false;
            lightDataManager->removeDataByID(objID);
        }
        return false;
    }

    bool OperatorsLight::execProfession()
    {
        return false;
    }
}

